package cn.smbms.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import cn.smbms.constant.Constants;
import cn.smbms.pojo.User;
import cn.smbms.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {
	
	@Resource
	private UserService userService;
	
	//配置跳转到登录页面的方法,  http://localhost:8080/SSM_ch10/user/toLogin
	@RequestMapping("/toLogin")
	public String toLogin() {
		return "login";  //   /WEB-INF/jsp/login.jsp
	}
	
	/**
	 * 用来处理登录用的。
	 * @param userCode 从login.jsp页面传递过来的【用户名】
	 * @param userPassword 从login.jsp页面传递过来的【密码】
	 * @param model 是用于保存数据
	 */
	@RequestMapping("/doLogin")
	public String doLogin(
			@RequestParam("userCode") String userCode,
			@RequestParam("userPassword")String userPassword,
			Model model, HttpSession session) {
		User user = userService.login(userCode);
		if (user == null) {
			//当前通过userCode没有查询到用户信息
			model.addAttribute("error", "用户名不存在!");
			//return "login";
			throw new RuntimeException("用户名不存在!");
		} else if (!user.getUserPassword().equals(userPassword)) {
			//如果通过userCode查询出来的用户信息中的密码与从login.jsp页面传递过来的【密码】不相等
			model.addAttribute("error", "密码不正确，请核实后再输入!");
			return "login";
		} else {
			//意味登录成功,将登录用户信息保存到Session作用域，key为userSession，登录成功后就跳转到首页
			session.setAttribute(Constants.USER_SESSION, user);
			return "redirect:/user/main";  //也可以使用重定向跳转到frame.jsp
			
		}
	}
	
	//定义一个用于跳转到frame.jsp页面的方法
	@RequestMapping("/main")
	public String toFrame() {
		return "frame";
	}
	
	//跳转到注册页面
	@RequestMapping("/register")
	public String toRegister() {
		return "register";
	}
	
	@RequestMapping("/list") 
	public String list(){
		return "user/list";
	}
	
	//组员新增
	@RequestMapping("/save")
	public String save() {
		return "save";
	}

	
	//只要是当前Controller中的方法里面抛了RuntimeException运行时异常都会被
	//handlerException方法进行捕获
	/*@ExceptionHandler(value= {RuntimeException.class})
	public String handlerException(RuntimeException e, HttpServletRequest request) {
		request.setAttribute("e", e); //将异常类对象保存到request作用域中
		return "error";
	}*/
	
}
